home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Portable Patmos 1.1 / patmos-src / src / lseek.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-19  |  907 b   |  38 lines  |  [TEXT/KAHL]

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <fcntl.h>
  4. #include "crtlocal.h"
  5.  
  6. off_t lseek(int fd, off_t off, int nMode)
  7.     {
  8.     ParamBlockRec   pbr;
  9.     if (crt_fd_tab[fd].flags & O_PIPE)
  10.         {
  11.         return 0;
  12.         }
  13.     if (crt_fd_tab[fd].flags & O_CATALOG)
  14.         {
  15.         crt_fd_tab[fd].flags = O_CATALOG|off;
  16.         return 0;
  17.         }
  18.     if (nMode == SEEK_SET)
  19.         nMode = fsFromStart;
  20.     else if (nMode == SEEK_CUR)
  21.         nMode = fsFromMark;
  22.     else if (nMode == SEEK_END)
  23.         nMode = fsFromLEOF;
  24.     pbr.ioParam.ioRefNum = crt_fd_tab[fd].fd;
  25.     pbr.ioParam.ioPosMode = nMode;
  26.     pbr.ioParam.ioPosOffset = off;
  27.     PBSetFPosSync(&pbr);
  28.     if ((eofErr == pbr.ioParam.ioResult) && (nMode == fsFromStart))
  29.         {
  30.         pbr.ioParam.ioMisc = (Ptr)off;
  31.         PBSetEOFSync(&pbr);
  32.         pbr.ioParam.ioPosMode = nMode;
  33.         pbr.ioParam.ioPosOffset = off;
  34.         PBSetFPosSync(&pbr);
  35.         }
  36.     return pbr.ioParam.ioPosOffset;
  37.     }    
  38.